1
2
3
4
5
6
7 package io.vavr.collection;
8
9 import io.vavr.Value;
10 import org.junit.Ignore;
11 import org.junit.Test;
12
13 import java.math.BigDecimal;
14 import java.util.ArrayList;
15 import java.util.Comparator;
16 import java.util.function.Function;
17 import java.util.function.Supplier;
18 import java.util.stream.Collector;
19
20 import static java.util.Comparator.nullsFirst;
21 import static io.vavr.TestComparators.toStringComparator;
22
23 public class TreeSetTest extends AbstractSortedSetTest {
24
25 @Override
26 protected <T> Collector<T, ArrayList<T>, ? extends TreeSet<T>> collector() {
27 return TreeSet.collector(Comparators.naturalComparator());
28 }
29
30 @Override
31 protected <T> TreeSet<T> empty() {
32 return TreeSet.empty(Comparators.naturalComparator());
33 }
34
35 @Override
36 protected <T> TreeSet<T> emptyWithNull() {
37 return TreeSet.empty(nullsFirst(Comparators.naturalComparator()));
38 }
39
40 @Override
41 protected boolean emptyShouldBeSingleton() {
42 return false;
43 }
44
45 @Override
46 protected <T> TreeSet<T> of(T element) {
47 return TreeSet.of(Comparators.naturalComparator(), element);
48 }
49
50 @Override
51 protected <T> TreeSet<T> of(Comparator<? super T> comparator, T element) {
52 return TreeSet.of(comparator, element);
53 }
54
55 @Override
56 @SafeVarargs
57 @SuppressWarnings("varargs")
58 protected final <T> TreeSet<T> of(Comparator<? super T> comparator, T... elements) {
59 return TreeSet.of(comparator, elements);
60 }
61
62 @Override
63 @SafeVarargs
64 @SuppressWarnings("varargs")
65 protected final <T> TreeSet<T> of(T... elements) {
66 return TreeSet.<T> of(Comparators.naturalComparator(), elements);
67 }
68
69 @Override
70 protected <T> TreeSet<T> ofAll(Iterable<? extends T> elements) {
71 return TreeSet.ofAll(Comparators.naturalComparator(), elements);
72 }
73
74 @Override
75 protected <T extends Comparable<? super T>> TreeSet<T> ofJavaStream(java.util.stream.Stream<? extends T> javaStream) {
76 return TreeSet.ofAll(javaStream);
77 }
78
79 @Override
80 protected TreeSet<Boolean> ofAll(boolean... elements) {
81 return TreeSet.ofAll(elements);
82 }
83
84 @Override
85 protected TreeSet<Byte> ofAll(byte... elements) {
86 return TreeSet.ofAll(elements);
87 }
88
89 @Override
90 protected TreeSet<Character> ofAll(char... elements) {
91 return TreeSet.ofAll(elements);
92 }
93
94 @Override
95 protected TreeSet<Double> ofAll(double... elements) {
96 return TreeSet.ofAll(elements);
97 }
98
99 @Override
100 protected TreeSet<Float> ofAll(float... elements) {
101 return TreeSet.ofAll(elements);
102 }
103
104 @Override
105 protected TreeSet<Integer> ofAll(int... elements) {
106 return TreeSet.ofAll(elements);
107 }
108
109 @Override
110 protected TreeSet<Long> ofAll(long... elements) {
111 return TreeSet.ofAll(elements);
112 }
113
114 @Override
115 protected TreeSet<Short> ofAll(short... elements) {
116 return TreeSet.ofAll(elements);
117 }
118
119 @Override
120 protected <T> TreeSet<T> tabulate(int n, Function<? super Integer, ? extends T> f) {
121 return TreeSet.tabulate(Comparators.naturalComparator(), n, f);
122 }
123
124 @Override
125 protected <T> TreeSet<T> fill(int n, Supplier<? extends T> s) {
126 return TreeSet.fill(Comparators.naturalComparator(), n, s);
127 }
128
129 @Override
130 protected boolean useIsEqualToInsteadOfIsSameAs() {
131 return true;
132 }
133
134 @Override
135 protected int getPeekNonNilPerformingAnAction() {
136 return 1;
137 }
138
139 @Override
140 protected TreeSet<Character> range(char from, char toExclusive) {
141 return TreeSet.range(from, toExclusive);
142 }
143
144 @Override
145 protected TreeSet<Character> rangeBy(char from, char toExclusive, int step) {
146 return TreeSet.rangeBy(from, toExclusive, step);
147 }
148
149 @Override
150 protected TreeSet<Double> rangeBy(double from, double toExclusive, double step) {
151 return TreeSet.rangeBy(from, toExclusive, step);
152 }
153
154 @Override
155 protected TreeSet<Integer> range(int from, int toExclusive) {
156 return TreeSet.range(from, toExclusive);
157 }
158
159 @Override
160 protected TreeSet<Integer> rangeBy(int from, int toExclusive, int step) {
161 return TreeSet.rangeBy(from, toExclusive, step);
162 }
163
164 @Override
165 protected TreeSet<Long> range(long from, long toExclusive) {
166 return TreeSet.range(from, toExclusive);
167 }
168
169 @Override
170 protected TreeSet<Long> rangeBy(long from, long toExclusive, long step) {
171 return TreeSet.rangeBy(from, toExclusive, step);
172 }
173
174 @Override
175 protected TreeSet<Character> rangeClosed(char from, char toInclusive) {
176 return TreeSet.rangeClosed(from, toInclusive);
177 }
178
179 @Override
180 protected TreeSet<Character> rangeClosedBy(char from, char toInclusive, int step) {
181 return TreeSet.rangeClosedBy(from, toInclusive, step);
182 }
183
184 @Override
185 protected TreeSet<Double> rangeClosedBy(double from, double toInclusive, double step) {
186 return TreeSet.rangeClosedBy(from, toInclusive, step);
187 }
188
189 @Override
190 protected TreeSet<Integer> rangeClosed(int from, int toInclusive) {
191 return TreeSet.rangeClosed(from, toInclusive);
192 }
193
194 @Override
195 protected TreeSet<Integer> rangeClosedBy(int from, int toInclusive, int step) {
196 return TreeSet.rangeClosedBy(from, toInclusive, step);
197 }
198
199 @Override
200 protected TreeSet<Long> rangeClosed(long from, long toInclusive) {
201 return TreeSet.rangeClosed(from, toInclusive);
202 }
203
204 @Override
205 protected TreeSet<Long> rangeClosedBy(long from, long toInclusive, long step) {
206 return TreeSet.rangeClosedBy(from, toInclusive, step);
207 }
208
209
210
211 @Test
212 public void shouldCollectEmpty() {
213 final TreeSet<Integer> actual = java.util.stream.Stream.<Integer>empty().collect(TreeSet.collector());
214 assertThat(actual).isEmpty();
215 }
216
217 @Test
218 public void shouldCollectNonEmpty() {
219 final TreeSet<Integer> actual = java.util.stream.Stream.of(1, 2, 3).collect(TreeSet.collector());
220 final TreeSet<Integer> expected = of(1, 2, 3);
221 assertThat(actual).isEqualTo(expected);
222 }
223
224
225
226 @Test
227 public void shouldConstructStreamFromEmptyJavaStream() {
228 final TreeSet<Integer> actual = ofJavaStream(java.util.stream.Stream.<Integer>empty());
229 final TreeSet<Integer> expected = empty();
230 assertThat(actual).isEqualTo(expected);
231 }
232
233 @Test
234 public void shouldConstructStreamFromNonEmptyJavaStream() {
235 final TreeSet<Integer> actual = TreeSet.ofAll(Comparators.naturalComparator(), java.util.stream.Stream.of(1, 2, 3));
236 final TreeSet<Integer> expected = of(1, 2, 3);
237 assertThat(actual).isEqualTo(expected);
238 }
239
240 @Test
241 public void shouldConstructStreamFromNonEmptyJavaStreamWithoutComparator() {
242 final TreeSet<Integer> actual = ofJavaStream(java.util.stream.Stream.of(1, 2, 3));
243 final TreeSet<Integer> expected = of(1, 2, 3);
244 assertThat(actual).isEqualTo(expected);
245 }
246
247 @Test
248 public void shouldConstructFromTreeSetWithoutComparator() {
249 final TreeSet<Integer> actual = TreeSet.ofAll(TreeSet.of(1));
250 final TreeSet<Integer> expected = of(1);
251 assertThat(actual).isEqualTo(expected);
252 }
253
254
255
256 @Test
257 public void shouldNarrowTreeSet() {
258 final TreeSet<Double> doubles = TreeSet.of(toStringComparator(), 1.0d);
259 final TreeSet<Number> numbers = TreeSet.narrow(doubles);
260 final int actual = numbers.add(new BigDecimal("2.0")).sum().intValue();
261 assertThat(actual).isEqualTo(3);
262 }
263
264
265
266 @Test
267 public void shouldKeepComparator() {
268 final List<Integer> actual = TreeSet.empty(inverseIntComparator()).addAll(TreeSet.of(1, 2, 3)).toList();
269 final List<Integer> expected = List.of(3, 2, 1);
270 assertThat(actual).isEqualTo(expected);
271 }
272
273
274
275 @Test
276 public void shouldCalculateDiffIfNotTreeSet() {
277 final TreeSet<Integer> actual = of(1, 2, 3).diff(HashSet.of(1, 2));
278 final TreeSet<Integer> expected = of(3);
279 assertThat(actual).isEqualTo(expected);
280 }
281
282
283
284 @Test
285 public void shouldCalculateUnionIfNotTreeSet() {
286 final TreeSet<Integer> actual = of(1, 2, 3).union(HashSet.of(4));
287 final TreeSet<Integer> expected = of(1, 2, 3, 4);
288 assertThat(actual).isEqualTo(expected);
289 }
290
291
292
293 @Test
294 public void shouldCalculateEmptyIntersectIfNotTreeSet() {
295 final TreeSet<Integer> actual = of(1, 2, 3).intersect(HashSet.of(4));
296 assertThat(actual).isEmpty();
297 }
298
299 @Test
300 public void shouldCalculateIntersectIfNotTreeSet() {
301 final TreeSet<Integer> actual = of(1, 2, 3).intersect(HashSet.of(3));
302 final TreeSet<Integer> expected = of(3);
303 assertThat(actual).isEqualTo(expected);
304 }
305
306
307
308 @Test
309 public void shouldFillWithoutComparator() {
310 final TreeSet<Integer> actual = TreeSet.fill(3, () -> 1);
311 final TreeSet<Integer> expected = of(1, 1, 1);
312 assertThat(actual).isEqualTo(expected);
313 }
314
315
316
317 @Test
318 public void shouldTabulateWithoutComparator() {
319 final TreeSet<Integer> actual = TreeSet.tabulate(3, Function.identity());
320 final TreeSet<Integer> expected = of(0, 1, 2);
321 assertThat(actual).isEqualTo(expected);
322 }
323
324
325
326 @Test
327 public void shouldReturnSelfOnConvertToSortedSet() {
328 final Value<Integer> value = of(1, 2, 3);
329 assertThat(value.toSortedSet()).isSameAs(value);
330 }
331
332 @Test
333 public void shouldReturnSelfOnConvertToSortedSetWithSameComparator() {
334 final TreeSet<Integer> value = of(1, 2, 3);
335 assertThat(value.toSortedSet(value.comparator())).isSameAs(value);
336 }
337
338 @Test
339 public void shouldNotReturnSelfOnConvertToSortedSetWithDifferentComparator() {
340 final Value<Integer> value = of(1, 2, 3);
341 assertThat(value.toSortedSet(Integer::compareTo)).isNotSameAs(value);
342 }
343
344 @Test
345 public void shouldPreserveComparatorOnConvertToSortedSetWithoutDistinctComparator() {
346 final Value<Integer> value = TreeSet.of(Comparators.naturalComparator().reversed(), 1, 2, 3);
347 assertThat(value.toSortedSet().mkString(",")).isEqualTo("3,2,1");
348 }
349
350
351
352 @Test
353 public void shouldTransform() {
354 final String transformed = of(42).transform(v -> String.valueOf(v.get()));
355 assertThat(transformed).isEqualTo("42");
356 }
357
358
359
360 private static Comparator<Integer> inverseIntComparator() {
361 return (i1, i2) -> Integer.compare(i2, i1);
362 }
363
364 @Override
365 @Test
366 @Ignore
367 public void shouldZipAllEmptyAndNonNil() {
368 }
369
370 @Override
371 @Test
372 @Ignore
373 public void shouldZipAllNonEmptyAndNil() {
374 }
375 }